Filter and format settings are now saved to registry.
authoroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 26 Apr 2006 12:45:15 +0000 (12:45 +0000)
committeroliskoli <oliskoli@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Wed, 26 Apr 2006 12:45:15 +0000 (12:45 +0000)
gpsbabel/win32/gui-2/GPSBabelGUI.dof
gpsbabel/win32/gui-2/about.dfm
gpsbabel/win32/gui-2/common.pas
gpsbabel/win32/gui-2/filter.dfm
gpsbabel/win32/gui-2/filter.pas
gpsbabel/win32/gui-2/gpsbabel.iss
gpsbabel/win32/gui-2/options.dfm
gpsbabel/win32/gui-2/options.pas
gpsbabel/win32/gui-2/utils.pas

index 74c076f4b3a8c6f78e0675f675ab6372b7f891de..f3d14f90940c8a0b08e331247d8dd942fa55b215 100644 (file)
@@ -57,9 +57,9 @@ AutoIncBuild=0
 MajorVer=0\r
 MinorVer=2\r
 Release=3\r
-Build=2\r
+Build=4\r
 Debug=0\r
-PreRelease=1\r
+PreRelease=0\r
 Special=0\r
 Private=0\r
 DLL=0\r
@@ -68,13 +68,13 @@ CodePage=1252
 [Version Info Keys]\r
 CompanyName=GPSBabel Makers\r
 FileDescription=GPSBabel Windows Frontend\r
-FileVersion=0.2.3.2\r
-InternalName=GPSBabelGUI-2\r
-LegalCopyright=(C) 2005 Olaf Klein (O.B.Klein@T-Online.de)\r
+FileVersion=0.2.3.4\r
+InternalName=\r
+LegalCopyright=(C) 2005-2006 Olaf Klein (O.B.Klein@T-Online.de)\r
 LegalTrademarks=\r
 OriginalFilename=GPSBabelGUI.exe\r
 ProductName=GPSBabel\r
-ProductVersion=1.2.8-beta01182006\r
+ProductVersion=1.2.8-beta20060420_ds\r
 Comments=internal test build\r
 [HistoryLists\hlConditionals]\r
 Count=1\r
index fb5bc04878fbf0189aaa28bd6542a2d23bad0aed..5e235e3c7ff4b25eb9fed9e95e33a5f18f1be543 100644 (file)
Binary files a/gpsbabel/win32/gui-2/about.dfm and b/gpsbabel/win32/gui-2/about.dfm differ
index 80baf50b888ce7a75dbcde58b8e05ceb5ac1f859..53d6327436c2a24941ddd18db4c7f428e5148805 100644 (file)
@@ -21,14 +21,14 @@ unit common;
 interface\r
 \r
 uses\r
-  Windows, SysUtils, Classes, Messages, Controls, StdCtrls, Inifiles;\r
+  Windows, SysUtils, Classes, Messages, Controls, StdCtrls;\r
 \r
 const\r
   OTypes: array[0..6] of PChar =\r
     ('unknown', 'integer', 'float', 'string', 'boolean', 'file', 'outfile');\r
 \r
   gpsbabel_knows_inifile: Boolean = False;\r
-  gpsbabel_ini: TInifile = nil;\r
+//gpsbabel_ini: TInifile = nil;\r
   \r
 resourcestring\r
   SGPSBabelURL =         'http://www.gpsbabel.org';\r
@@ -45,7 +45,6 @@ var
   gpsbabel_minor, gpsbabel_major, gpsbabel_release: Integer;\r
   SGPSBabelGUIVersion: string;\r
   CFixedFileinfo: TVSFixedFileInfo;\r
-  gpsbabel_inifile: TInifile;\r
 \r
 const\r
   WM_STARTUP = WM_USER + 1;\r
@@ -252,12 +251,7 @@ begin
       1:\r
         opt.format := string(cin);\r
       2:\r
-        begin\r
-          opt.name := string(cin);\r
-          s := gpsbabel_ini.ReadString(opt.Format, opt.Name, #01);\r
-          if (s <> #01) then\r
-            opt.def := StrNew(PChar(s));\r
-        end;\r
+        opt.name := string(cin);\r
       3:\r
         opt.hint := string(cin);\r
       4:\r
@@ -281,11 +275,17 @@ begin
         if (cin^ <> #0) then\r
           opt.max := StrNew(cin);\r
     end;\r
-    \r
+\r
     index := index + 1;\r
     cin := cend + 1;\r
   end;\r
 \r
+  if (opt.name = 'snlen') and (opt.gbdef = nil) then\r
+  begin\r
+    opt.gbdef := StrNew('10');\r
+    opt.def := opt.gbdef;\r
+  end;\r
+\r
   index := Self.IndexOf(opt.format);\r
   if (index >= 0) then\r
     list := TStringList(Self.Objects[index])\r
@@ -537,6 +537,7 @@ begin
   end;\r
 end;\r
 \r
+(*\r
 function Open_gpsbabel_ini(): TInifile;\r
 var\r
   s: string;\r
@@ -549,11 +550,12 @@ begin
   else\r
     Result := TIniFile.Create(s)\r
 end;\r
+*)\r
 \r
 initialization\r
 \r
   gpsbabel_exe := SysUtils.ExtractFilePath(ParamStr(0)) + SGPSBabelExeFilename;\r
   SGPSBabelGUIVersion := GetFileVersion(ParamStr(0));\r
-  gpsbabel_ini := Open_gpsbabel_ini();\r
+//gpsbabel_ini := Open_gpsbabel_ini();\r
 \r
 end.\r
index d3faa1abd52f31f14551fea96572182b14a55349..c9967bf7398c43ac24f0fe57b6155f13b45a4adf 100644 (file)
Binary files a/gpsbabel/win32/gui-2/filter.dfm and b/gpsbabel/win32/gui-2/filter.dfm differ
index ddc92b92a501029b1b6b4e31252f3f8e768de691..18f963e854ad67b3ea8384eb25dbd10e16e4ea4c 100644 (file)
@@ -23,14 +23,14 @@ interface
 uses\r
   gnugettext, gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
-  StdCtrls, ComCtrls, Buttons, Mask, ExtCtrls,\r
+  StdCtrls, ComCtrls, Buttons, Mask, ExtCtrls, Registry,\r
   common, utils;\r
 \r
 type\r
   TfrmFilter = class(TForm)\r
     gbTracks: TGroupBox;\r
     cbTrackTitle: TCheckBox;\r
-    edTrackTitle: TEdit;\r
+    edTrackTitleValue: TEdit;\r
     cbTrackSplit: TCheckBox;\r
     cbTrackTime: TCheckBox;\r
     udTimeHours: TUpDown;\r
@@ -82,6 +82,9 @@ type
     edWayptRadiusLon: TEdit;\r
     cbTrackRangeTimeZone: TCheckBox;\r
     BitBtn2: TBitBtn;\r
+    cbTrackFixes: TCheckBox;\r
+    cbTrackCourse: TCheckBox;\r
+    cbTrackSpeed: TCheckBox;\r
     procedure cbTrackTimeClick(Sender: TObject);\r
     procedure FormCreate(Sender: TObject);\r
     procedure cbTrackTitleClick(Sender: TObject);\r
@@ -110,6 +113,10 @@ type
     function AllValid: Boolean;\r
     function ValidateNumerical(AEdit: TCustomEdit; AMin, AMax: Extended): Boolean;\r
     procedure ChangeCheckBoxesChecked(AComponent: TComponent; Restore: Boolean = False);\r
+    procedure LoadSettingsFromInifile();\r
+    procedure LoadSettingsFromRegistry();\r
+    procedure StoreSettingsToInifile();\r
+    procedure StoreSettingsToRegistry();\r
   public\r
     { Public-Deklarationen }\r
     function CmdLine: string;\r
@@ -217,6 +224,15 @@ begin
       gpsbabel_version]);\r
     gbTracks.ShowHint := True;\r
   end;\r
+\r
+  if not(gpsbabel_knows_inifile) then\r
+  begin\r
+    cbTrackFixes.Enabled := False;\r
+    cbTrackCourse.Enabled := False;\r
+    cbTrackSpeed.Enabled := False;\r
+  end;\r
+//LoadSettingsFromInifile();\r
+  LoadSettingsFromRegistry();\r
 end;\r
 \r
 function TfrmFilter.ValidateNumerical(AEdit: TCustomEdit; AMin, AMax: Extended): Boolean;\r
@@ -276,7 +292,7 @@ end;
 \r
 procedure TfrmFilter.cbTrackTitleClick(Sender: TObject);\r
 begin\r
-  edTrackTitle.Enabled := cbTrackTitle.Checked;\r
+  edTrackTitleValue.Enabled := cbTrackTitle.Checked;\r
 end;\r
 \r
 function TfrmFilter.CmdLine: string;\r
@@ -331,7 +347,7 @@ begin
   begin\r
     Result := Format('%s -x %s', [Result, 'track']);\r
     if cbTrackTitle.Checked then\r
-      Result := Format('%s,title="%s"', [Result, edTrackTitle.Text]);\r
+      Result := Format('%s,title="%s"', [Result, edTrackTitleValue.Text]);\r
 \r
     if cbTrackTime.Checked then\r
     begin\r
@@ -359,7 +375,6 @@ begin
     else\r
       dt_bias := 0.0;\r
 \r
-\r
     if cbTrackStart.Checked then\r
     begin\r
       dt := Int(dtpTrackStartDate.DateTime) + Frac(dtpTrackStartTime.DateTime) + dt_bias;\r
@@ -374,6 +389,12 @@ begin
         Result,\r
         FormatDateTime('yyyymmddhhnnss', dt)]);\r
     end;\r
+    if cbTrackFixes.Checked then\r
+      Result := Format('%s,fix', [Result]);\r
+    if cbTrackCourse.Checked then\r
+      Result := Format('%s,course', [Result]);\r
+    if cbTrackSpeed.Checked then\r
+      Result := Format('%s,speed', [Result]);\r
   end;\r
 \r
   if AnyChecked(gbRoutes) then\r
@@ -419,7 +440,12 @@ end;
 \r
 procedure TfrmFilter.btnOKClick(Sender: TObject);\r
 begin\r
-  if AllValid then ModalResult := mrOK;\r
+  if AllValid then\r
+  begin\r
+//  StoreSettingsToInifile();\r
+    StoreSettingsToRegistry();\r
+    ModalResult := mrOK;\r
+  end;\r
 end;\r
 \r
 procedure TfrmFilter.cbTrackStartClick(Sender: TObject);\r
@@ -537,7 +563,134 @@ end;
 \r
 procedure TfrmFilter.BitBtn2Click(Sender: TObject);\r
 begin\r
-  WinOpenURL(readme_html_path + '#id274853');\r
+  WinOpenURL(readme_html_path + '#filters');\r
+end;\r
+\r
+procedure TfrmFilter.LoadSettingsFromInifile();\r
+var\r
+  c: TComponent;\r
+  i: Integer;\r
+  l: TStrings;\r
+  s: string;\r
+begin\r
+(*\r
+  l := TStringList.Create;\r
+  try\r
+    gpsbabel_ini.ReadSection('GPSBabelGUI', l);\r
+    for i := 0 to l.Count - 1 do\r
+    begin\r
+      s := l.Strings[i];\r
+      c := SELF.FindComponent('cb' + s);\r
+      if (c <> nil) and (c is TCheckbox) then\r
+        TCheckbox(c).Checked := (gpsbabel_ini.ReadString('GPSBabelGUI', s, '0') <> '0');\r
+    end;\r
+    edTrackTitleValue.Text := gpsbabel_ini.ReadString('track', 'title',\r
+      edTrackTitleValue.Text);\r
+    edRoutesSimplifyMaxPoints.Text := gpsbabel_ini.ReadString('simplify', 'count',\r
+      edRoutesSimplifyMaxPoints.Text);\r
+  finally\r
+    l.Free;\r
+  end;\r
+*)\r
+end;\r
+\r
+procedure TfrmFilter.StoreSettingsToInifile();\r
+var\r
+  i: Integer;\r
+  c: TComponent;\r
+begin\r
+(*\r
+  for i := 0 to SELF.ComponentCount - 1 do\r
+  begin\r
+    c := SELF.Components[i];\r
+    if (c is TCheckBox) then\r
+    begin\r
+      if TCheckBox(c).Checked then\r
+        gpsbabel_ini.WriteString('GPSBabelGUI', Copy(TCheckbox(c).Name, 3, 256), '1')\r
+      else\r
+        gpsbabel_ini.DeleteKey('GPSBabelGUI', Copy(TCheckbox(c).Name, 3, 256));\r
+    end;\r
+  end;\r
+\r
+  if cbTrackTitle.Checked then\r
+    gpsbabel_ini.WriteString('track', 'title', edTrackTitleValue.Text)\r
+  else\r
+    gpsbabel_ini.DeleteKey('track', 'title');\r
+\r
+  if cbRouteSimplify.Checked then\r
+    gpsbabel_ini.WriteString('simplify', 'count', edRoutesSimplifyMaxPoints.Text)\r
+  else\r
+    gpsbabel_ini.DeleteKey('simplify', 'count');\r
+*)\r
+end;\r
+\r
+procedure TfrmFilter.StoreSettingsToRegistry();\r
+var\r
+  i: Integer;\r
+  c: TComponent;\r
+  r: TRegistry;\r
+begin\r
+  r := TRegistry.Create;\r
+  try\r
+    r.RootKey := HKEY_CURRENT_USER;\r
+    if not(r.OpenKey('\SOFTWARE\GPSBabel', True)) then Exit;\r
+\r
+    for i := 0 to SELF.ComponentCount - 1 do\r
+    begin\r
+      c := SELF.Components[i];\r
+      if (c is TCheckbox) then\r
+        r.WriteBool('filter:' + Copy(c.Name, 3, 256), TCheckBox(c).Checked)\r
+      else if (c is TEdit) then\r
+        r.WriteString('filter:' + Copy(c.Name, 3, 256), TEdit(c).Text);\r
+    end;\r
+  finally\r
+    r.Free;\r
+  end;\r
+end;\r
+\r
+procedure TfrmFilter.LoadSettingsFromRegistry();\r
+var\r
+  i: Integer;\r
+  c: TComponent;\r
+  r: TRegistry;\r
+  s: string;\r
+  u: TUpDown;\r
+  \r
+  function ReadString(R: TRegistry; const Key, Def: string): string;\r
+  begin\r
+    if R.ValueExists(Key) then\r
+      Result := R.ReadString(Key)\r
+    else\r
+      Result := Def;\r
+  end;\r
+\r
+begin\r
+  r := TRegistry.Create;\r
+  try\r
+    r.RootKey := HKEY_CURRENT_USER;\r
+    if not(r.OpenKey('\SOFTWARE\GPSBabel', True)) then Exit;\r
+\r
+    for i := 0 to SELF.ComponentCount - 1 do\r
+    begin\r
+      c := SELF.Components[i];\r
+      try\r
+        if (c is TCheckbox) then\r
+          TCheckBox(c).Checked := r.ReadBool('filter:' + Copy(c.Name, 3, 256))\r
+        else if (c is TEdit) then\r
+        begin\r
+          s := ReadString(r, 'filter:' + Copy(c.Name, 3, 256), TEdit(c).Text);\r
+          if HasUpDown(TEdit(c), u) then\r
+            u.Position := StrToInt(s)\r
+          else\r
+            TEdit(c).Text := s;\r
+        end;\r
+      except\r
+        on E: Exception do ;\r
+      end;\r
+    end;\r
+  finally\r
+    r.Free;\r
+  end;\r
 end;\r
 \r
 end.\r
index 3bc9d7b387f1f02ee88bc0be4c1289be17d4fc37..0cf06c22c7489e224faf019d046247d870545f6e 100644 (file)
@@ -2,7 +2,7 @@
 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!\r
 \r
 #define Version "1.2.8"\r
-#define Release "-beta20060405"\r
+#define Release "-beta20060420_ds"\r
 \r
 [Setup]\r
 AppName=GPSBabel\r
index 0fe28ae43b6d68a95066717430c7e491fe1436a2..a30cc841c7182acccbfd3df2c37f37f20866ac77 100644 (file)
Binary files a/gpsbabel/win32/gui-2/options.dfm and b/gpsbabel/win32/gui-2/options.dfm differ
index 0056924bb90ccc4b90bd865b6936a8ea0023fea4..a8953bddcd35436b76e586aad2478a48547d0eaf 100644 (file)
@@ -23,7 +23,7 @@ interface
 uses\r
   TypInfo, gnugettext, gnugettextDx,\r
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,\r
-  StdCtrls, ExtCtrls, ComCtrls, Buttons,\r
+  StdCtrls, ExtCtrls, ComCtrls, Buttons, Registry,\r
   Common, delphi;\r
 \r
 type\r
@@ -39,6 +39,7 @@ type
     procedure btnHelpClick(Sender: TObject);\r
     procedure FormKeyDown(Sender: TObject; var Key: Word;\r
       Shift: TShiftState);\r
+    procedure btnOKClick(Sender: TObject);\r
   private\r
     { Private declarations }\r
     FOpts: TStringList;\r
@@ -54,6 +55,9 @@ type
     function ParseOptsLine(const Line: string; List: TStrings): Integer;\r
     procedure SetOpts(AList: TStringList);\r
     procedure SetOptsStr(const AValue: string);\r
+    procedure StoreOptionsToInifile();\r
+    procedure StoreOptionsToRegistry();\r
+    procedure LoadSettingsFromRegistry();\r
   public\r
     { Public declarations }\r
     FFormat: string;\r
@@ -198,7 +202,7 @@ begin
     chb.Top := xy.y;\r
     _xy := SetCaption(chb, dgettext(GPSBabel_Domain, o.Hint));\r
     chb.Alignment := taRightJustify;\r
-    chb.Checked := False;\r
+//  chb.Checked := (gpsbabel_ini.ReadString(o.format, o.name, #1) <> #1);\r
     chb.Parent := pnOptions;\r
 \r
     chb.Hint := SysUtils.Format(_('Short "%s"'), [o.name]);\r
@@ -267,6 +271,8 @@ begin
   i := btnCancel.Left - btnOK.Left;\r
   btnCancel.Left := pnBottom.Width - btnCancel.Width - btnHelp.Left;\r
   btnOK.Left := btnCancel.Left - i;\r
+\r
+  LoadSettingsFromRegistry();\r
 end;\r
 \r
 function TfrmOptions.GetOptsStr: string;\r
@@ -657,4 +663,157 @@ begin
   ModalResult := mrCancel;\r
 end;\r
 \r
+procedure TfrmOptions.StoreOptionsToInifile();\r
+var\r
+  i: Integer;\r
+  o: POption;\r
+  c: TComponent;\r
+  s, value: string;\r
+begin\r
+(*\r
+  for i := 0 to FOpts.Count - 1 do\r
+  begin\r
+    o := Pointer(FOpts.Objects[i]);\r
+    if (o.chb = nil) then Continue;\r
+\r
+    if o.chb.AllowGrayed then\r
+    begin\r
+      if (o.chb.State = cbGrayed) then\r
+      begin\r
+        gpsbabel_ini.DeleteKey(o.format, o.name);\r
+        Continue;\r
+      end;\r
+    end\r
+    else if not(o.chb.Checked) then\r
+    begin\r
+      gpsbabel_ini.DeleteKey(o.format, o.name);\r
+      Continue;\r
+    end;\r
+\r
+    if (o.edit = nil) then\r
+    begin\r
+      if o.chb.Checked then\r
+        value := '1'\r
+      else\r
+        value := '0';\r
+    end\r
+      else value := GetStrProp(o.edit, 'Text');\r
+    if (o.gbdef <> nil) and (StrPas(o.gbdef) = value) then\r
+      gpsbabel_ini.DeleteKey(o.format, o.name)\r
+    else\r
+      gpsbabel_ini.WriteString(o.format, o.name, value);\r
+  end;\r
+*)\r
+end;\r
+\r
+procedure TfrmOptions.StoreOptionsToRegistry();\r
+var\r
+  i: Integer;\r
+  o: POption;\r
+  c: TComponent;\r
+  s, key, value: string;\r
+  r: TRegistry;\r
+begin\r
+  r := TRegistry.Create;\r
+  try\r
+    r.RootKey := HKEY_CURRENT_USER;\r
+    if not(r.OpenKey('\Software\GPSBabel', True)) then Exit;\r
+\r
+    for i := 0 to FOpts.Count - 1 do\r
+    begin\r
+      o := Pointer(FOpts.Objects[i]);\r
+      if (o.chb = nil) then Continue;\r
+\r
+      key := o.format + ':' + o.name;\r
+\r
+      if o.chb.AllowGrayed then\r
+      begin\r
+        if (o.chb.State = cbGrayed) then\r
+        begin\r
+          r.DeleteValue(key);\r
+          Continue;\r
+        end;\r
+      end\r
+      else if not(o.chb.Checked) then\r
+      begin\r
+        r.DeleteValue(key);\r
+        Continue;\r
+      end;\r
+\r
+      if (o.edit = nil) then\r
+      begin\r
+        if o.chb.Checked then\r
+          value := '1'\r
+        else\r
+          value := '0';\r
+      end\r
+        else value := GetStrProp(o.edit, 'Text');\r
+      if (o.gbdef <> nil) and (StrPas(o.gbdef) = value) then\r
+        r.WriteString(key, '(default)')\r
+      else\r
+        r.WriteString(key, value);\r
+    end;\r
+  finally\r
+    r.Free;\r
+  end;\r
+end;\r
+\r
+procedure TfrmOptions.LoadSettingsFromRegistry();\r
+var\r
+  i: Integer;\r
+  o: POption;\r
+  c: TComponent;\r
+  s, key, value: string;\r
+  r: TRegistry;\r
+  u: TUpDown;\r
+begin\r
+  r := TRegistry.Create;\r
+  try\r
+    r.RootKey := HKEY_CURRENT_USER;\r
+    if not(r.OpenKeyReadOnly('\Software\GPSBabel')) then Exit;\r
+\r
+    for i := 0 to FOpts.Count - 1 do\r
+    begin\r
+      o := Pointer(FOpts.Objects[i]);\r
+      if (o.chb = nil) then Continue;\r
+\r
+      key := o.format + ':' + o.name;\r
+      if not r.ValueExists(key) then Continue;\r
+\r
+      Value := r.ReadString(key);\r
+      if (o.edit = nil) then\r
+      begin\r
+        if o.chb.AllowGrayed then\r
+        begin\r
+          if (value = '1') then\r
+            o.chb.State := cbChecked\r
+          else\r
+            o.chb.State := cbUnChecked;\r
+        end\r
+          else o.chb.Checked := True;\r
+      end\r
+        else\r
+      begin\r
+        o.chb.Checked := True;\r
+        if (value <> '(default)') then\r
+        begin\r
+          if HasUpDown(TEdit(o.edit), u) then\r
+            u.Position := StrToInt(value)\r
+          else\r
+            SetStrProp(o.edit, 'Text', value);\r
+        end;\r
+        o.edit.Enabled := True;\r
+      end;\r
+    end;\r
+  finally\r
+    r.Free;\r
+  end;\r
+end;\r
+\r
+procedure TfrmOptions.btnOKClick(Sender: TObject);\r
+begin\r
+//StoreOptionsToInifile();\r
+  StoreOptionsToRegistry();\r
+end;\r
+\r
 end.\r
index 2f8162db92b5d92cec3d237d198726183b2afaaf..427502ae5f057ecd52cb3e3231ef07fb77a135e0 100644 (file)
@@ -26,7 +26,8 @@ interface
 \r
 uses\r
   gnugettext,\r
-  Windows, SysUtils, Classes, Registry, ShellAPI;\r
+  Windows, SysUtils, Classes, StdCtrls, ComCtrls,\r
+  Registry, ShellAPI;\r
 \r
 type\r
   PBoolean = ^Boolean;\r
@@ -54,11 +55,12 @@ procedure MakeFirstTranslation(AComponent: TComponent);
 \r
 function readme_html_path: string;\r
 \r
+function HasUpDown(E: TEdit; var UpDown: TUpdown): Boolean;\r
+\r
 implementation\r
 \r
 uses\r
   Forms,\r
-  StdCtrls,\r
   common;\r
 \r
 function GetShortName(const PathName: string): string;\r
@@ -125,7 +127,7 @@ begin
 \r
     StartupInfo.cb := Sizeof (StartupInfo);\r
     StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;\r
-    StartupInfo.wShowWindow := SW_HIDE and SW_SHOWMINNOACTIVE;\r
+    StartupInfo.wShowWindow := {SW_HIDE or} SW_SHOWMINNOACTIVE;\r
     StartupInfo.hStdInput := GetStdHandle (STD_INPUT_HANDLE);\r
     StartupInfo.hStdOutput:= hWrite;\r
     StartupInfo.hStdError := hWrite;\r
@@ -142,12 +144,14 @@ begin
     end;\r
 \r
     s := '';\r
+    Error := 0;\r
 \r
     repeat\r
       Wait_Result := WaitforSingleObject(ProcessInfo.hProcess, 10);\r
       if PeekNamedPipe(hRead, nil, 0, nil, @BytesRead, nil) then\r
       begin\r
-        if (BytesRead > 0) then Application.ProcessMessages;\r
+        if (BytesRead > 0) then\r
+          Application.ProcessMessages;\r
         while (BytesRead > 0) do\r
         begin\r
           BytesDone := BytesRead;\r
@@ -161,11 +165,12 @@ begin
             s := s + string(buffer);\r
             Dec(BytesRead, BytesDone);\r
           end;\r
-        end;\r
+        end\r
       end;\r
     until (Wait_Result = WAIT_OBJECT_0);\r
 \r
-    if not GetExitCodeProcess(ProcessInfo.hProcess, Error) then Error := 0;\r
+    if (Error = 0) then\r
+      if not GetExitCodeProcess(ProcessInfo.hProcess, Error) then Error := 0;\r
 \r
     if (Error <> 0) and (Error <> 1) then\r
       raise eGPSBabelError.CreateFmt(_('"gpsbabel.exe" returned error 0x%x (%d)'), [Error, Error]);\r
@@ -400,6 +405,27 @@ begin
     Result := SGPSBabelURL + '/readme.html';\r
 end;\r
 \r
+function HasUpDown(E: TEdit; var UpDown: TUpdown): Boolean;\r
+var\r
+  i: Integer;\r
+  c: TComponent;\r
+  o: TComponent;\r
+begin\r
+  Result := False;\r
+  o := E.Owner;\r
+  for i := 0 to o.ComponentCount - 1 do\r
+  begin\r
+    c := o.Components[i];\r
+    if (c is TUpDown) and (TUpDown(c).Associate = E) then\r
+    begin\r
+      UpDown := TUpDown(c);\r
+      Result := True;\r
+      Exit;\r
+    end;\r
+  end;\r
+end;\r
+\r
+\r
 var\r
   hMutex: THandle;\r
   \r